Skip to content

10.3 MongoDB 操作

温馨提醒在 Furion 包中默认集成了 EFCore如果不使用 EFCore,可安装纯净版 Furion.Pure 代替 Furion

查看拓展库贡献细节https://gitee.com/dotnetchina/Furion/pulls/423

10.3.1 关于 MongoDB

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

10.3.2 如何集成

Furion 框架中,已经推出 MongoDB 拓展包 Furion.Extras.DatabaseAccessor.MongoDB

10.3.2.1 注册 MongoDB 服务

使用非常简单,只需要在 Startup.cs 中添加 services.AddMongoDB(connectionString) 即可。如:

// 方式一  
services.AddMongoDB("mongodb://localhost:27017");  

// 方式二  
services.AddMongoDB(new MongoClientSettings {});  

// 方式三  
services.AddMongoDB(new MongoUrl {});  

10.3.3 基本使用

在使用之前,我们可以通过构造函数注入 IMongoDBRepository 接口,如:

  • 非泛型版本
private readonly IMongoDBRepository _mongoRepository;  
public PersonService(IMongoDBRepository mongoRepository)  
{  
    _mongoRepository = mongoRepository;  
}  

10.3.3.1 常见例子

var database = _mongoRepository.Context.GetDatabase("foo");  
var collection = database.GetCollection<BsonDocument>("bar");  

await collection.InsertOneAsync(new BsonDocument("Name", "Jack"));  

var list = await collection.Find(new BsonDocument("Name", "Jack"))  
    .ToListAsync();  

foreach(var document in list)  
{  
    Console.WriteLine(document["Name"]);  
}  

public class Person  
{  
    public ObjectId Id { get; set; }  
    public string Name { get; set; }  
}  

var database = _mongoRepository.Context.GetDatabase("foo");  
var collection = database.GetCollection<Person>("bar");  

await collection.InsertOneAsync(new Person { Name = "Jack" });  

var list = await collection.Find(x => x.Name == "Jack")  
                           .ToListAsync();  

foreach(var person in list)  
{  
    Console.WriteLine(person.Name);  
}  

10.3.3.2 获取 MongoClient 对象

IMongoDBRepository 只封装了 MongoDB 基础功能,如需获取更多操作可通过 .Context 属性获取 MongoClient 对象,如:

var client = _mongoRepository.Context;  

10.3.4 反馈与建议

与我们交流给 Furion 提 Issue


了解更多想了解更多 MongoDB 知识可查阅 MongoDB 仓库